package com.itheima.xmy.Demo;

public class NumberTest {
    public static void main(String[] args) {
        Number number = new Number();
        Thread thread1 = new Thread(()->{
            while (true) {
                number.run();
            }
        },"线程1奇数");
        Thread thread2 = new Thread(()->{
            while (true) {
                number.run1();
            }
        },"线程2偶数");
        thread1.start();
        thread2.start();
    }
}

class Number implements Runnable {
    //定义一个变量
    int a = 1;

    public synchronized void run() {
        if (a <= 100 & a % 2 == 1) {
            System.out.println(Thread.currentThread().getName() + "  " + a);
            a++;
            this.notify();  //执行完自己的任务了  唤醒另一条线程
        } else {
//不是奇数，需要等待别人执行并把自己唤醒
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void run1()  {  //这里为什么要加锁  不加锁2线程为什么不能执行？
        if (a <= 100 & a % 2 == 0) {
            System.out.println(Thread.currentThread().getName() + "  " + a);
            a++;
            this.notify();
        } else {
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //当a增加到100时，会执行偶数方法，执行完毕之后a的值变为101，此时应该结束程序运行
        if(a==101){
            System.exit(0);
        }
    }
}